﻿using ExcellentProjectPlus.Dominio.Examenes.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;

namespace Aplicacion.Examenes.RespuestaExamenes
{
    public class ServicioDeGestionDeRespuestaExamenes
        : IServicioDeGestionDeRespuestaExamenes
    {
        #region Propiedades
        IServicioDeGestionDeRespuestaExamenes _servicioDeAdministracionDeRespuestaExamenes;
        #endregion

        #region Constructores
        public ServicioDeGestionDeRespuestaExamenes(IServicioDeGestionDeRespuestaExamenes servicioDeAdministracionDeRespuestaExamenes)
        {
            _servicioDeAdministracionDeRespuestaExamenes = servicioDeAdministracionDeRespuestaExamenes;
        }
        #endregion
        public IEnumerable<RespuestaExamen> ObtenerRespuestaExamenes()
        {
            IEnumerable<RespuestaExamen> resultado = null;
            var trxOptions = new TransactionOptions();
            //Lectura con nivel de aislamiento ReadUncommited para evitar bloqueos en la base
            trxOptions.IsolationLevel = IsolationLevel.ReadUncommitted;
            trxOptions.Timeout = TimeSpan.FromMinutes(2);
            using (var transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, trxOptions))
            {
                resultado = _servicioDeAdministracionDeRespuestaExamenes.ObtenerRespuestaExamenes();
                transaccion.Complete();
            }

            return resultado;
        }

        public RespuestaExamen ObtenerRespuestaExamenPorId(int id)
        {
            RespuestaExamen resultado = null;
            var trxOptions = new TransactionOptions();
            //Lectura con nivel de aislamiento ReadUncommited para evitar bloqueos en la base
            trxOptions.IsolationLevel = IsolationLevel.ReadCommitted;
            trxOptions.Timeout = TimeSpan.FromMinutes(2);
            using (var transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, trxOptions))
            {
                resultado = _servicioDeAdministracionDeRespuestaExamenes.ObtenerRespuestaExamenPorId(id);
                transaccion.Complete();
            }

            return resultado;
        }

        public void AgregarRespuestaExamen(RespuestaExamen respuestaexamen)
        {
            _servicioDeAdministracionDeRespuestaExamenes.AgregarRespuestaExamen(respuestaexamen);
        }

        public void ModificarRespuestaExamen(RespuestaExamen respuestaexamen)
        {
            _servicioDeAdministracionDeRespuestaExamenes.ModificarRespuestaExamen(respuestaexamen);
        }

        public void EliminarRespuestaExamen(RespuestaExamen respuestaexamen)
        {
            _servicioDeAdministracionDeRespuestaExamenes.EliminarRespuestaExamen(respuestaexamen);
        }


        public void Dispose()
        {
            throw new NotImplementedException();
        }
    }
}
